#ifndef PCODE_H
#define PCODE_H

#include <stdlib.h>
#include <stdio.h>
#include "pile.h"
#include "symbole.h"

#define COEF_CODES		20	// Le coéficient d'allocation du tableau codes
#define INIT_CAPACITE_PCODE	20

struct instruction
{
	char codeOp[3];			// STO LOD ...
	int type;			// Entier, double
	char value[200];		// Deplacement, type de comparaison (0=>addition)
	char commentaire[58];		// Commentaire laissé par le programmeur
};

struct pcode
{
	struct instruction **codes;	// Pointeur sur le tableau des instructions
	int size;			// La taille du tableau
	int capaciteMax;		// Capacité maximal du tableau
};

/*Constructeur*/
struct pcode* constrPcode();

/*Ajout d'une operation à la liste p_code*/
void addOperation(struct pcode *p, char codeOp[3], int type, char value[20], char commentaire[58]);

/*Sauvegarde dans un fichier l'ensemble du p_code*/
void save(struct pcode *src, FILE *dest);

/*Supprime toutes les lignes du p_code*/
void nettoyerPcode(struct pcode *p);

/*Affichage de la totalité du p_code généré*/
void affichagePcode(struct pcode *p);

/*Pour chaque symbole de la liste, on l'empile. Production du p_code (INC) si le flag est à 1*/
void loadSymboleIntoListe(struct liste *src, struct pile *dest, char emplacement[128], struct pcode *p_code, int flag);

/*Charge une structure p_code venant d'un fichier ainsi que la table des symbôles*/
void loadPcode(struct liste *lst, struct pcode *dest, FILE *src);

#endif
